package server.domain;

import java.io.IOException;

import server.persistence.FilePersistenceManager;
import server.persistence.PersistenceManager;
import shop.exceptions.ArtikelExistiertBereitsException;
import shop.exceptions.MitarbeiterExistiertBereitsException;
import shop.local.valueobjects.ArtikelListe;
import shop.local.valueobjects.Kunde;
import shop.local.valueobjects.Mitarbeiter;
import shop.local.valueobjects.MitarbeiterListe;


public class MitarbeiterVerwaltung {
	
	private MitarbeiterListe mitarbeiterBestand = new MitarbeiterListe();

	private PersistenceManager pm = new FilePersistenceManager();
	
	public void liesDaten(String datei) throws IOException {
		pm.openForReading(datei);

		Mitarbeiter einMitarbeiter;
		do {
			einMitarbeiter = pm.ladeMitarbeiter();
			if (einMitarbeiter != null) {
				try {
					einfuegen(einMitarbeiter);
				} catch (MitarbeiterExistiertBereitsException e1) {
				}
			}
		} while (einMitarbeiter != null);

		pm.close();
	}
	
	public void setzeListe(MitarbeiterListe liste) {
		this.mitarbeiterBestand = liste;
	}

	public void schreibeDaten(String datei) throws IOException  {

		pm.openForWriting(datei);

		MitarbeiterListe liste = mitarbeiterBestand;
		
		for (int i = 0; i <= liste.size(); i++) {
			Mitarbeiter m = liste.get(i);
			if (m != null) {
				pm.speichereMitarbeiter(m);
			}
		}
		
		/*
		while (liste != null) {
			Mitarbeiter m = liste.gibErstenMitarbeiter();
			if (m != null) {
				pm.speichereMitarbeiter(m);
			}
			liste = liste.gibRestlicheMitarbeiter();
		}
		*/
		
		pm.close();
	}
	
	public int letzteID() {
		if (mitarbeiterBestand.letzterMitarbeiter() == null) {
			return 0;
		}
		else {
			return mitarbeiterBestand.letzterMitarbeiter().getMitarbeiterNr();
		}
	}
		
	public void einfuegen(Mitarbeiter einMitarbeiter) throws MitarbeiterExistiertBereitsException {
		mitarbeiterBestand.einfuegen(einMitarbeiter);
	}
	
	public MitarbeiterListe gibMitarbeiter() {
		return mitarbeiterBestand;
	}
	

	public int mLogin(String mName, String mPasswort) {
		MitarbeiterListe liste = mitarbeiterBestand;
	
		for(int i = 1; i <= liste.size(); i++) {
			
			String mNameSystem = liste.get(i).getMitarbeiterName();
			String mPasswortSystem = liste.get(i).getMitarbeiterPasswort();
			
			if ( mName.equals(mNameSystem) && mPasswort.equals(mPasswortSystem) ) {
				return liste.get(i).getMitarbeiterNr();
			}
		}
		return 0;
	}
	
	public MitarbeiterListe sucheMitarbeiterNummer(int mNr) {
		MitarbeiterListe suchErg = new MitarbeiterListe();
		//ArtikelListe aktArtikelListenElt = artikelBestand;

		for (int i = 1; i <= mitarbeiterBestand.size(); i++) {
			
			// 
			int mitarbeiterNummerSystem = mitarbeiterBestand.get(i).getMitarbeiterNr();
			if (mitarbeiterNummerSystem == mNr) {
					try {
						suchErg.einfuegen(mitarbeiterBestand.get(i));
					} catch (MitarbeiterExistiertBereitsException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			}
			
		}
		return suchErg;
	}
}
